/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package robot_maker;

import Excepciones.DinamicaDato;
import Excepciones.Sistema;
import Modelo.BaseDato;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import Excepciones.InventarioException;
import Excepciones.ProcesamientoDato;

/** La clase Inventario se encarga de almacenar la cantidad de robots y
 *  accesorios que produce la fabrica.
 *
 * @author CarlosScipione
 */
public class Inventario {

    private int _codRobot;
    private int _codAccesorio;
    private int _cantidad;

 /** Contruye el objeto inventario
  *
  * @param codRobot
  * @param codAccesorio
  * @param cantidad
  * @throws InventarioException
  */
    public Inventario(int codRobot, int codAccesorio, String cantidad) throws
            InventarioException {
        int cant = 0;

         if (cantidad.isEmpty()){
             JOptionPane.showMessageDialog(null,
                    "Ningun campo debe ser vacio.");
             throw new InventarioException(20, "EL CAMPO DE CANTIDAD VACIO",
                     "CONSTRUCTOR");
        }else{
             cant = Integer.parseInt(cantidad);
                if(cant < 1){
                    JOptionPane.showMessageDialog(null,
                    "La cantidad debe ser mayor a 0.");
                     throw new InventarioException(21,
                             "EL CAMPO DE CANTIDAD MENOR A 0", "CONSTRUCTOR");
                }
        }
        _codRobot = codRobot;
        _codAccesorio = codAccesorio;
        _cantidad = cant;
        
    }

/** Obtiene la cantidad de produccion
 *
 * @return int
 */
    public int getCantidad() {
        return _cantidad;
    }


/**Obtiene el codigo del accesorio
 *
 * @return int
 */
    public int getCodAccesorio() {
        return _codAccesorio;
    }


/**Obtiene el codigo del robot
 *
 * @return int
 */
    public int getCodRobot() {
        return _codRobot;
    }

/** Inserta una produccion si no existe ese modelo en la BD o sino la actualiza
 *
 * @param paquete
 * @param robot
 * @throws BasesdeDatos
 */
    public void producir(Inventario paquete, Boolean robot) throws
            ProcesamientoDato{
        try {
        if (revisar(paquete._codRobot, paquete._codAccesorio, robot) == 0){

        if (robot){
                
        BaseDato.ejecutarSqlInsert("insert into INVENTARIO (robot_id, date," +
                " cantidad, accesorio_id) values (" + paquete._codRobot + ","
                + "now()" + "," + paquete._cantidad + ",null)");

        }
        else{
        BaseDato.ejecutarSqlInsert("insert into INVENTARIO (robot_id, date," +
                " cantidad, accesorio_id) values (null" + "," +
                "now()" + "," + paquete._cantidad + "," + paquete._codAccesorio
                + ")");

        }
        }else{

        if (robot){
        BaseDato.ejecutarSqlInsert("update INVENTARIO set date=now(), " +
                "cantidad=cantidad + " + paquete._cantidad  + " where robot_id="
                + paquete._codRobot);
        }
        else{
        BaseDato.ejecutarSqlInsert("update INVENTARIO set date=now(), " +
                "cantidad=cantidad + " + paquete._cantidad  + " where " +
                "accesorio_id=" + paquete._codAccesorio);

        }

        }
        } catch (DinamicaDato ex) {
                throw new ProcesamientoDato(1,
               "NO SE PUDO PROCESAR DATOS FOR FALTA DE LOS MISMOS",
               "EJECUTARSQLSELECT");                }
   }

    
    
   /** Revisa en la BD si existe ese modelo dado
    *
    * @param codigo
    * @param codigo1
    * @param robot
    * @return int
    * @throws BasesdeDatos
    */
 public int revisar(int codigo, int codigo1, boolean robot) throws
         ProcesamientoDato{
        ResultSet lista;
        try {
        if (robot){
            
        lista = BaseDato.ejecutarSqlSelect(
                "select count(robot_id) from INVENTARIO " +
                "where robot_id=" + codigo);
        try {
            lista.next();
            if (lista.getInt(1) == 0) {
                return 0;
            }
        } catch (SQLException ex) {
            Sistema.loggear(17, "revisar", "SQL SYNTAXIS",
                    Inventario.class, "SQLException");
        }
        return 1;

        }
        else{
        lista = 
            BaseDato.ejecutarSqlSelect("select count(accesorio_id) from " +
            "INVENTARIO where accesorio_id=" + codigo1);
            try {
                 lista.next();
                if (lista.getInt(1) == 0) {
                    return 0;
                }
            } catch (SQLException ex) {
       Sistema.loggear(17, "revisar", "SQL SYNTAXIS", Inventario.class,
                    "SQLException");
            }
        return 1;
        }
    } catch (DinamicaDato ex) {
                throw new ProcesamientoDato(1,
               "NO SE PUDO PROCESAR DATOS FOR FALTA DE LOS MISMOS",
               "EJECUTARSQLSELECT");
    }
 }



}
